<?php

namespace core\libs;

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

class mailer {
    protected $host;
    protected $username;
    protected $password;
    protected $from;

    //初始化成员属性
    function __construct() {
        $config = \core\libs\config::get("app", "MAILER");
        $this->host = $config["host"];
        $this->username = $config["username"];
        $this->password = $config["password"];
        $this->from = $config["from"];
    }

    // 发送邮件
    public function send($address, $title, $content) {
        $mail = new PHPMailer(true);

        try {
            //服务器配置
            $mail->CharSet ="UTF-8"; //设定邮件编码
            $mail->SMTPDebug = 2; // 调试模式输出
            $mail->isSMTP(); // 使用SMTP
            $mail->Host = $this->host; // SMTP服务器 
            $mail->SMTPAuth = true; // 允许 SMTP 认证
            $mail->Username = $this->username; // SMTP 用户名  即邮箱的用户名
            $mail->Password = $this->password; // SMTP 密码  部分邮箱是授权码(例如163邮箱)
            // $mail->SMTPSecure = 'TLS'; // 允许 TLS 或者ssl协议
            $mail->Port = 25; // 服务器端口 25 或者465 具体要看邮箱服务器支持
            
            //发件人
            $mail->setFrom($mail->Username, $this->from); 

            foreach(explode(",", $address) as $val) {
                $mail->addAddress($val); // 收件人，可添加多个收件人
            }

            //回复的时候回复给哪个邮箱 建议和发件人一致
            // $mail->addReplyTo($mail->Username, 'info'); 

            //抄送
            //$mail->addCC('cc@example.com'); 

            //密送
            //$mail->addBCC('bcc@example.com'); 
        
            //发送附件
            // $mail->addAttachment('../xy.zip'); // 添加附件
            // $mail->addAttachment('../thumb-1.jpg', 'new.jpg'); // 发送附件并且重命名
        
            //Content
            $mail->isHTML(true); // 是否以HTML文档格式发送  发送后客户端可直接显示对应HTML内容
            $mail->Subject = $title;
            $mail->Body    = $content;
            // $mail->AltBody = $content;
            $mail->send();
        } catch (Exception $e) {
            throw new \Exception('邮件发送失败: ', $mail->ErrorInfo);
        }
    }
}